package com.ctsi.organise.event.listener;

import com.ctsi.auth.event.LoginInfoResouce;
import com.ctsi.auth.event.UserLoginBeforeEvent;
import com.ctsi.organise.common.api.OrganiseFactoryBean;
import com.ctsi.organise.common.model.Organise;
import com.ctsi.organise.common.model.Person;
import com.ctsi.organise.common.model.UserLogin;
import com.ctsi.organise.entity.UserLoginHistoryEntity;
import com.ctsi.organise.service.UserLoginHistoryEntityManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

/**
 * @author zhangjw
 * @className LoginBeforeListener
 * @description 登陆之前记录日志
 * @date 2019/3/2 14:38
 **/
@Component
public class LoginBeforeListener implements ApplicationListener<UserLoginBeforeEvent> {

    @Autowired
    private UserLoginHistoryEntityManager userLoginHistoryEntityManager;

    // 验证当前用户是否存在

    @Async
    public void onApplicationEvent(UserLoginBeforeEvent event) {
        LoginInfoResouce resouce = (LoginInfoResouce) event.getSource();
        String userName = resouce.getLoginName();
       UserLogin userLogin = OrganiseFactoryBean.getInstance().getUserLoginProxy().findUserLoginByLoginName(userName);
        if (userLogin != null ) {
            Organise organise4User = OrganiseFactoryBean.getInstance().getPersonServiceProxy().getOrganise4User(userLogin.getPartyId());
            Organise depart4User = OrganiseFactoryBean.getInstance().getPersonServiceProxy().getDepart4User(userLogin.getPartyId());
            Person personById = OrganiseFactoryBean.getInstance().getPersonServiceProxy().findPersonById(userLogin.getPartyId());
            UserLoginHistoryEntity userLoginHistoryEntity=new UserLoginHistoryEntity();
            userLoginHistoryEntity.setId(resouce.getId());
            userLoginHistoryEntity.setLoginId(userLogin.getPartyId());
            userLoginHistoryEntity.setLoginName(userLogin.getLoginName());
            userLoginHistoryEntity.setClientIp(resouce.getClientIp());
            userLoginHistoryEntity.setDeviceId(resouce.getDeviceId());
            userLoginHistoryEntity.setDeviceName(resouce.getDeviceName());
            userLoginHistoryEntity.setIsSucessful(1);
            userLoginHistoryEntity.setLoginDateTime(resouce.getLoginDateTime());
            userLoginHistoryEntity.setOrganId(organise4User.getPartyId());
            userLoginHistoryEntity.setOrganName(organise4User.getPartyName());
            userLoginHistoryEntity.setDepartId(depart4User.getPartyId());
            userLoginHistoryEntity.setDepartName(depart4User.getPartyName());
            userLoginHistoryEntity.setYear(resouce.getYear());
            userLoginHistoryEntity.setMounth(resouce.getMounth());
            userLoginHistoryEntity.setDay(resouce.getDay());
            userLoginHistoryEntity.setPersonName(personById.getFullName());
            userLoginHistoryEntityManager.insertUserLoginHistoryEntity(userLoginHistoryEntity);
        } else {
            UserLoginHistoryEntity userLoginHistoryEntity=new UserLoginHistoryEntity();
            userLoginHistoryEntity.setId(resouce.getId());
            userLoginHistoryEntity.setClientIp(resouce.getClientIp());
            userLoginHistoryEntity.setDeviceId(resouce.getDeviceId());
            userLoginHistoryEntity.setDeviceName(resouce.getDeviceName());
            userLoginHistoryEntity.setIsSucessful(0);
            userLoginHistoryEntity.setLoginDateTime(resouce.getLoginDateTime());
            userLoginHistoryEntity.setYear(resouce.getYear());
            userLoginHistoryEntity.setMounth(resouce.getMounth());
            userLoginHistoryEntity.setDay(resouce.getDay());
            userLoginHistoryEntityManager.insertUserLoginHistoryEntity(userLoginHistoryEntity);
        }

    }

}
